﻿using Entidades;
using FluentNHibernate.Mapping;
using Persistencia.Mappings.Extensions;

namespace Persistencia.Mappings
{
    public class GuionMap : ClassMap<Guion>
    {
        /// <summary>
        /// Constructor por defecto
        /// </summary>
        public GuionMap()
        {
            Table("GUION");

            this.DefaultMap();

            Map(x => x.Duracion).Column("Duracion");
            Map(x => x.Loops).Column("Loops");
            Map(x => x.Paginas).Column("Paginas");
            Map(x => x.Personajes).Column("Personajes");
            Map(x => x.Titulo).Column("Titulo");
            Map(x => x.Episodio).Column("Episodio");
            References(x => x.Proyecto).Column("Id_Proyecto");
            References(x => x.Adaptador).Column("Id_Adaptador");
            References(x => x.Director).Column("Id_Director");
            References(x => x.Estado).Column("Id_Estado");
            References(x => x.Mezclador).Column("Id_Mezclador");
            References(x => x.Traductor).Column("Id_Traductor");
            References(x => x.Temporizador).Column("Id_Temporizador");
            Map(x => x.Comentarios).Column("Comentarios");
            HasOne(x => x.Costo).PropertyRef( x => x.Guion).Cascade.All();
            //HasOne(x => x.Importacion).PropertyRef( x => x.Guion).Cascade.All();
            #region Items
            HasMany<GuionItem>(x => x.Items)
                .Table("GUION_ITEM")
                .Inverse()
                .KeyColumn("Id_Guion")
                .Cascade.AllDeleteOrphan()
                .LazyLoad();
            #endregion
            #region Transición de Estados
            HasMany<GuionEstadoTransicion>(x => x.TransicionDeEstados)
                .Table("GUION_ESTADO_TRANSICION")
                .Inverse()
                .KeyColumn("Id_Guion")
                .Cascade.AllDeleteOrphan()
                .LazyLoad();
            #endregion
            #region Transición de Autorizaciones
            HasMany<GuionAutorizacionTransicion>(x => x.TransicionDeAutorizaciones)
                .Table("GUION_AUTORIZACION_TRANSICION")
                .Inverse()
                .KeyColumn("Id_Guion")
                .Cascade.AllDeleteOrphan()
                .LazyLoad();
            #endregion
            #region Auditoria
            Map(x => x.FechaCreacion).Column("FechaCreacion");
            References(x => x.UsuarioCreacion).Column("Id_UsuarioCreacion").Nullable();
            Map(x => x.FechaUltimaModificacion).Column("FechaUltimaModificacion").Nullable();
            References(x => x.UsuarioUltimaModificacion).Column("Id_UsuarioUltimaModificacion").Nullable();
            Map(x => x.FechaTerminacion).Column("FechaTerminacion").Nullable();
            References(x => x.UsuarioTerminacion).Column("Id_UsuarioTerminacion").Nullable();
            Map(x => x.FechaCancelacion).Column("FechaCancelacion").Nullable();
            References(x => x.UsuarioCancelacion).Column("Id_UsuarioCancelacion").Nullable();
            #endregion
        }
    }
}
